package wxz.test.nio.socket.demo2;

/*
 * @(#)TimeServer.java 1.3 01/12/13 Listen for connections and tell callers what time it is. Demonstrates NIO socket
 * channels (accepting and writing), buffer handling, charsets, and regular expressions. Copyright 2001-2002 Oracle
 * and/or its affiliates. All rights reserved. Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met: -Redistributions of source code must
 * retain the above copyright notice, this list of conditions and the following disclaimer. -Redistribution in binary
 * form must reproduct the above copyright notice, this list of conditions and the following disclaimer in the
 * documentation and/or other materials provided with the distribution. Neither the name of Oracle and/or its
 * affiliates. or the names of contributors may be used to endorse or promote products derived from this software
 * without specific prior written permission. This software is provided "AS IS," without a warranty of any kind. ALL
 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN AND ITS LICENSORS SHALL NOT BE LIABLE
 * FOR ANY DAMAGES OR LIABILITIES SUFFERED BY LICENSEE AS A RESULT OF OR RELATING TO USE, MODIFICATION OR DISTRIBUTION
 * OF THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR
 * DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS
 * OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE SOFTWARE, EVEN IF SUN HAS BEEN ADVISED OF
 * THE POSSIBILITY OF SUCH DAMAGES. You acknowledge that Software is not designed, licensed or intended for use in the
 * design, construction, operation or maintenance of any nuclear facility.
 */

import java.io.IOException;
import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.nio.CharBuffer;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
import java.nio.charset.Charset;
import java.nio.charset.CharsetEncoder;
import java.util.Date;

public class TimeServer {

	// We can't use the normal daytime port (unless we're running as root,
	// which is unlikely), so we use this one instead
	private static int PORT = 8013;

	// The port we'll actually use
	private static int port = PORT;

	// Charset and encoder for US-ASCII
	private static Charset charset = Charset.forName("GBK");
	private static CharsetEncoder encoder = charset.newEncoder();

	public static void main(String[] args) throws IOException {

		ServerSocketChannel ssc = ServerSocketChannel.open();
		InetSocketAddress isa = new InetSocketAddress("localhost", port);
		ssc.socket().bind(isa);
		while(true){
			System.out.print("z");
			SocketChannel sc = ssc.accept();
			System.out.println(".");
			try {
				
				String now = new Date().toString();
				sc.write(encoder.encode(CharBuffer.wrap(now + "\r\n")));
				System.out.println("server:" + sc.socket().getInetAddress()
						+ " : " + now);
				sc.close();
			} finally {
				// Make sure we close the channel (and hence the socket)
				sc.close();
			}
		}
	}
}
